/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miage.entities;

import java.io.Serializable;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author TnP
 */
@Entity
@Table(name = "produit")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Produit.findAll", query = "SELECT p FROM Produit p"),
    @NamedQuery(name = "Produit.findByReferenceProduit", query = "SELECT p FROM Produit p WHERE p.referenceProduit = :referenceProduit"),
    @NamedQuery(name = "Produit.findByNomProduit", query = "SELECT p FROM Produit p WHERE p.nomProduit LIKE  :nomProduit"),
    @NamedQuery(name = "Produit.findByPrixProduit", query = "SELECT p FROM Produit p WHERE p.prixProduit <= :prixProduit"),
    @NamedQuery(name = "Produit.findByPrix", query = "SELECT p FROM Produit p WHERE p.prixProduit = :prixProduit"),
    @NamedQuery(name = "Produit.findByQuantite", query = "SELECT p FROM Produit p WHERE p.quantite = :quantite"),
    @NamedQuery(name = "Produit.findByImageProduit", query = "SELECT p FROM Produit p WHERE p.imageProduit = :imageProduit"),
    @NamedQuery(name = "Produit.findByDescriptionProduit", query = "SELECT p FROM Produit p WHERE p.descriptionProduit = :descriptionProduit"),
    @NamedQuery(name = "Produit.findAllCategorie", query = "SELECT DISTINCT (p.categorieProduit) FROM Produit p"),
    @NamedQuery(name = "Produit.findByReferenceMagasin", query = "SELECT p FROM Produit p WHERE p.referenceStore = :referenceStore"),
    @NamedQuery(name = "Produit.findByCategorieProduit", query = "SELECT p FROM Produit p WHERE p.categorieProduit = :categorieProduit")})


public class Produit implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "reference_produit")
    private String referenceProduit;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "nom_produit")
    private String nomProduit;
    @Basic(optional = false)
    @NotNull
    @Column(name = "prix_produit")
    private double prixProduit;
    @Column(name = "quantite")
    private Integer quantite;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "image_produit")
    private String imageProduit;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "description_produit")
    private String descriptionProduit;
    @Size(max = 25)
    @Column(name = "categorie_produit")
    private String categorieProduit;
    @JoinColumn(name = "reference_store", referencedColumnName = "reference_store")
    @ManyToOne(optional = false)
    private Magasin referenceStore;

    public Produit() {
    }

    public Produit(String referenceProduit) {
        this.referenceProduit = referenceProduit;
    }

    public Produit(String referenceProduit, String nomProduit, double prixProduit, String imageProduit, String descriptionProduit) {
        this.referenceProduit = referenceProduit;
        this.nomProduit = nomProduit;
        this.prixProduit = prixProduit;
        this.imageProduit = imageProduit;
        this.descriptionProduit = descriptionProduit;
    }

    public String getReferenceProduit() {
        return referenceProduit;
    }

    public void setReferenceProduit(String referenceProduit) {
        this.referenceProduit = referenceProduit;
    }

    public String getNomProduit() {
        return nomProduit;
    }

    public void setNomProduit(String nomProduit) {
        this.nomProduit = nomProduit;
    }

    public double getPrixProduit() {
        return prixProduit;
    }

    public void setPrixProduit(double prixProduit) {
        this.prixProduit = prixProduit;
    }

    public Integer getQuantite() {
        return quantite;
    }

    public void setQuantite(Integer quantite) {
        this.quantite = quantite;
    }

    public String getImageProduit() {
        return imageProduit;
    }

    public void setImageProduit(String imageProduit) {
        this.imageProduit = imageProduit;
    }

    public String getDescriptionProduit() {
        return descriptionProduit;
    }

    public void setDescriptionProduit(String descriptionProduit) {
        this.descriptionProduit = descriptionProduit;
    }

    public String getCategorieProduit() {
        return categorieProduit;
    }

    public void setCategorieProduit(String categorieProduit) {
        this.categorieProduit = categorieProduit;
    }

    public Magasin getReferenceStore() {
        return referenceStore;
    }

    public void setReferenceStore(Magasin referenceStore) {
        this.referenceStore = referenceStore;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (referenceProduit != null ? referenceProduit.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produit)) {
            return false;
        }
        Produit other = (Produit) object;
        if ((this.referenceProduit == null && other.referenceProduit != null) || (this.referenceProduit != null && !this.referenceProduit.equals(other.referenceProduit))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "miage.entities.Produit[ referenceProduit=" + referenceProduit + " ]";
    }
    
}
